"use strict";

import { config } from "./instances";

/**
 * @class Session 会话数据管理
 */
class Session {
  /**
   * @method constructor
   */
  constructor() {
    this._holder = null; // handler 里的 this, 保存 session 时需要使用该句柄
    this._loaded = false; // session 是否已经加载到该class中，防止重复加载
    // TODO: 增加命名空间
    this._attributes = {}; // session 内容, 该值内容应该包装在其中的属性里

    if (!this._loaded) {
      this._loaded = true;
      console.debug('[SessionLoad]', JSON.stringify(Rokid.param.session.attributes));
      console.debug("[SessionLoad]", "OK");
      this._attributes = Rokid.param.session.attributes;
      if (!this._attributes.hasOwnProperty("data")) {
        this._attributes["data"] = {};
      }
    }
  }

  // 设置 holder
  setHolder(holder) {
    this._holder = holder;
  }

  // 获取 holder
  getHolder() {
    return this._holder;
  }

  // 提交 session 数据
  submit() {
    if (this._holder !== null) {
      console.debug("[SessionSubmit]", Object.keys(this._attributes["data"]));
      this._holder.setSession(this._attributes);
    } else {
      console.debug("[SessionSubmitError]", "Can not submit without holder.");
    }
  }

  // 设置 session kv值
  set(key, val) {
    let data = {};
    data[key] = val;
    this._attributes["data"] = Object.assign(this._attributes["data"], data);
    // this.submit();
  }

  // 获取 session 值
  get(key, val = null) {
    if (this._attributes["data"].hasOwnProperty(key)) {
      return this._attributes["data"][key];
    }
    return val;
  }
}

export default Session;
